package es.tikitaka.actions.mantenimiento;

import java.util.HashSet;
import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import es.tikitaka.dao.AniosDicService;
import es.tikitaka.dao.ComiteService;
import es.tikitaka.dao.EqMantenimientoService;
import es.tikitaka.dao.UsuarioService;
import es.tikitaka.dictionary.AniosDic;
import es.tikitaka.domain.usuarios.Comite;
import es.tikitaka.domain.usuarios.EqMantenimiento;
import es.tikitaka.domain.usuarios.Usuario;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

@Name("mantenimientoAction")
@Scope(ScopeType.CONVERSATION)
public class MantenimientoAction {

	private int modo;
	private boolean nuevo;
	private boolean guardado = false;

	private String buscar;
	private int en;

	private AniosDic anio;

	private Comite comite;
	private Comite newComite;
	private EqMantenimiento equipoMant;
	private EqMantenimiento newEquipoMant;

	private List<AniosDic> listaAnios;

	private List<Usuario> listaTecnicosBus;
	private List<Usuario> listaTecnicosSel;

	@In(create = true)
	private AniosDicService aniosService;

	@In(create = true)
	private UsuarioService usuarioService;

	@In(create = true)
	private ComiteService comiteService;

	@In(create = true)
	private EqMantenimientoService eqMantenimientoService;

	/**
	 * Constructor por defecto
	 */
	public MantenimientoAction() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Método para crear un nuevo comité
	 */
	public void nuevoComite() {
		newComite = new Comite();
		listaAnios = aniosService.getList();
		newComite.setM_tecnicos(new HashSet<Usuario>());
		guardado = false;
	}

	/**
	 * Método para crear un nuevo equipo de mantenimiento
	 */
	public void nuevoEqMantenimiento() {
		newEquipoMant = new EqMantenimiento();
		listaAnios = aniosService.getList();
		newEquipoMant.setM_tecnicos(new HashSet<Usuario>());
		guardado = false;
	}

	/**
	 * Método para buscar los técnicos que formarán parte del comite/equipo de
	 * mantenimiento
	 */
	public void buscarTecnicos() {

		StringBuffer s = new StringBuffer();

		s
				.append("select u from Usuario u left join fetch u.perfil p where p.id = 2 ");

		if (buscar != null && buscar.length() > 0) {
			if (en == 1) {
				// buscar en apellidos
				s.append("and upper(u.apellidos) like upper('%'||?1||'%') ");
			} else if (en == 2) {
				// buscar en nombre
				s.append("and upper(u.nombre) like upper('%'||?1||'%') ");
			} else if (en == 3) {
				// buscar en nombre de usuario
				s.append("and upper(u.username) like upper('%'||?1||'%') ");
			}
		}

		s.append("order by u.apellidos, u.nombre");

		listaTecnicosBus = usuarioService.buscar(buscar, null, null, null, s);
	}

	/*
	 * getters and setters
	 */

	/**
	 * 
	 * @return
	 */
	public int getModo() {
		return modo;
	}

	/**
	 * 
	 * @param modo
	 */
	public void setModo(int modo) {
		this.modo = modo;
	}

	/**
	 * 
	 * @return
	 */
	public boolean isNuevo() {
		return nuevo;
	}

	/**
	 * 
	 * @param nuevo
	 */
	public void setNuevo(boolean nuevo) {
		this.nuevo = nuevo;
	}

	/**
	 * 
	 * @return
	 */
	public String getBuscar() {
		return buscar;
	}

	/**
	 * 
	 * @param buscar
	 */
	public void setBuscar(String buscar) {
		this.buscar = buscar;
	}

	/**
	 * 
	 * @return
	 */
	public int getEn() {
		return en;
	}

	/**
	 * 
	 * @param en
	 */
	public void setEn(int en) {
		this.en = en;
	}

	/**
	 * 
	 * @return
	 */
	public AniosDic getAnio() {
		return anio;
	}

	/**
	 * 
	 * @param anio
	 */
	public void setAnio(AniosDic anio) {
		this.anio = anio;
	}

	/**
	 * 
	 * @return
	 */
	public Comite getComite() {
		return comite;
	}

	/**
	 * 
	 * @param comite
	 */
	public void setComite(Comite comite) {
		this.comite = comite;
	}

	/**
	 * 
	 * @return
	 */
	public Comite getNewComite() {
		return newComite;
	}

	/**
	 * 
	 * @param newComite
	 */
	public void setNewComite(Comite newComite) {
		this.newComite = newComite;
	}

	/**
	 * 
	 * @return
	 */
	public EqMantenimiento getEquipoMant() {
		return equipoMant;
	}

	/**
	 * 
	 * @param equipoMant
	 */
	public void setEquipoMant(EqMantenimiento equipoMant) {
		this.equipoMant = equipoMant;
	}

	/**
	 * 
	 * @return
	 */
	public EqMantenimiento getNewEquipoMant() {
		return newEquipoMant;
	}

	/**
	 * 
	 * @param newEquipoMant
	 */
	public void setNewEquipoMant(EqMantenimiento newEquipoMant) {
		this.newEquipoMant = newEquipoMant;
	}

	/**
	 * 
	 * @return
	 */
	public List<AniosDic> getListaAnios() {
		return listaAnios;
	}

	/**
	 * 
	 * @param listaAnios
	 */
	public void setListaAnios(List<AniosDic> listaAnios) {
		this.listaAnios = listaAnios;
	}

	/**
	 * 
	 * @return
	 */
	public List<Usuario> getListaTecnicosBus() {
		return listaTecnicosBus;
	}

	/**
	 * 
	 * @param listaTecnicosBus
	 */
	public void setListaTecnicosBus(List<Usuario> listaTecnicosBus) {
		this.listaTecnicosBus = listaTecnicosBus;
	}

	/**
	 * 
	 * @return
	 */
	public List<Usuario> getListaTecnicosSel() {
		return listaTecnicosSel;
	}

	/**
	 * 
	 * @param listaTecnicosSel
	 */
	public void setListaTecnicosSel(List<Usuario> listaTecnicosSel) {
		this.listaTecnicosSel = listaTecnicosSel;
	}

}
